﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Collections;
using System.Data;
using System.Drawing;
using Modelo;

namespace BaseDeDatos
{
    public class BDRegistrar
    {
        const string conexion = "Data Source=.\\sqlexpress; Initial Catalog=MercadoSeguridad; Integrated Security=true";
        public static Producto getProducto(string id)
        {
            try
            {
                SqlConnection canal = new SqlConnection(conexion);
                SqlCommand comando = canal.CreateCommand();
                comando.CommandText = "Select * From [Producto] Where IdProducto=@id";
                comando.Parameters.AddWithValue("id", id);
                canal.Open();
                SqlDataReader reader = comando.ExecuteReader();
                Producto producto = new Producto();
                if (reader.Read())
                {
                    producto.Codigo = id;
                    producto.Valor = float.Parse(reader["PrecioUnitario"].ToString());
                    producto.Imagen = (byte[])reader["Imagen"];
                    producto.Nombre = reader["Nombre"].ToString();
                    
                }
                else
                    throw new Exception("No existe el producto");
                return producto;
            }
            
            catch (Exception ex)
            {
                throw ex;
            }
                
        }
        public static void registrarPersona(string Ci, string nombre, string apellido, string telefono, string celular, string mail,string direccion,int cargo)
        {
            try
             {
                 SqlConnection canal = new SqlConnection(conexion);
                 SqlCommand comando = canal.CreateCommand();
                 comando.CommandText = "Insert Into [Persona](CI,Nombre,Apellido,Telefono,Celular,Direccion,Email,IdCargo) Values (@ci,@nom,@ap,@telf,@cel,@dir,@mail,@car)";
                 comando.Parameters.AddWithValue("ci", Ci);
                 comando.Parameters.AddWithValue("nom", nombre);
                comando.Parameters.AddWithValue("ap", apellido);
                 comando.Parameters.AddWithValue("telf", telefono);
                comando.Parameters.AddWithValue("cel", celular);
                 comando.Parameters.AddWithValue("dir", direccion);
                 comando.Parameters.AddWithValue("mail", mail);
                 comando.Parameters.AddWithValue("car", cargo);
                 canal.Open();
                 comando.ExecuteNonQuery();    
             }
             catch (SqlException)
             {
                 throw new Exception("Ya tiene registrado el Ci: "+Ci);
             }
             catch (Exception ex)
             {
                 throw ex;
             }
        }
        public static bool ExisteUsuario(string usuario)
        {
            try
            {
                SqlConnection canal = new SqlConnection(conexion);
                SqlCommand comando = canal.CreateCommand();
                comando.CommandText = "Select CI From [Usuario] Where Usuario=@usu";
                comando.Parameters.AddWithValue("usu", usuario);
                canal.Open();
                SqlDataReader reader = comando.ExecuteReader();
                return reader.HasRows;
            }
            catch (Exception ex)
            {
                throw ex;
            }


        }
        public static void registrarProducto(string nombre, float valor, byte[] imagen)
        {
            try
            {
                SqlConnection canal = new SqlConnection(conexion);
                SqlCommand comando = canal.CreateCommand();
                comando.CommandText = "Insert Into [Producto](Nombre,PrecioUnitario,Cantidad,Imagen) Values (@nom,@val,@can,@ima)";
                comando.Parameters.AddWithValue("nom", nombre);
                comando.Parameters.AddWithValue("val", valor);
                comando.Parameters.AddWithValue("can", 0);
                comando.Parameters.AddWithValue("ima", imagen);
                canal.Open();
                comando.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public static ICollection getProductos()
        {
            try
            {
                SqlConnection canal = new SqlConnection(conexion);
                SqlDataAdapter comando = new SqlDataAdapter();
                comando.SelectCommand = new SqlCommand("Select * From [Producto]", canal);
                canal.Open();
                DataTable dt = new DataTable();
                dt.Columns.Add(new DataColumn("Nombre", typeof(String)));
                dt.Columns.Add(new DataColumn("PrecioUnitario", typeof(float)));
                dt.Columns.Add(new DataColumn("Cantidad", typeof(int)));
                dt.Columns.Add(new DataColumn("Imagen", typeof(byte[])));
                
                comando.Fill(dt);
                DataView dv = new DataView(dt);
                return dv;


            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static bool ExisteCi(string ci)
        {
            try
            {
                SqlConnection canal = new SqlConnection(conexion);
                SqlCommand comando = canal.CreateCommand();
                comando.CommandText = "Select CI From [Persona] Where CI=@ci";
                comando.Parameters.AddWithValue("ci", ci);
                canal.Open();
                SqlDataReader reader = comando.ExecuteReader();
                return reader.HasRows;
            }
            catch (Exception ex)
            {
                throw ex;
            }


        }
          public static void  registrarCuenta(string Ci,string usuario, string contrasena,byte[] imagen,string cargo,DateTime fec,DateTime horaEntrada,DateTime horaSalida)
        {
            try
             {
                 SqlConnection canal = new SqlConnection(conexion);
                 SqlCommand comando = canal.CreateCommand();
                 comando.CommandText = "Insert Into [Usuario](CI,Usuario,Cargo,Contrasena,Imagen,FecUltimoCambio,HoraEntrada,HoraSalida,Bloqueado) Values (@ci,@usu,@car,@con,@ima,@fec,@he,@hs,@fa)";
                 comando.Parameters.AddWithValue("ci", Ci);
                comando.Parameters.AddWithValue("usu", usuario);
                 comando.Parameters.AddWithValue("car", cargo);
                comando.Parameters.AddWithValue("con", contrasena);
                 comando.Parameters.AddWithValue("ima", imagen);
                 comando.Parameters.AddWithValue("fec",fec);
                 comando.Parameters.AddWithValue("he", horaEntrada);
                 comando.Parameters.AddWithValue("hs", horaSalida);
                 comando.Parameters.AddWithValue("fa",false);
                 canal.Open();
                 comando.ExecuteNonQuery();                 
             }
             catch (SqlException)
             {
                 throw new Exception("Ya tiene registrado el Usuario: "+usuario);
             }
             catch (Exception ex)
             {
                 throw ex;
             }
        }
            public static void registrar(string Ci, string nombre, string apellido, string telefono, string celular, string mail, string usuario, string contrasena,byte[] imagen,string cargo,string direccion)
            {
                string error="";
            try
             {
            //    registrarPersona(Ci,nombre,apellido,telefono,celular,mail,direccion);
            }
                 catch (Exception ex)
             {
                 error+="-"+ex.Message;
             }
              
             
             try
             {
                 //registrarCuenta(Ci,usuario,contrasena,imagen,cargo);
             }
             catch (Exception ex)
             {
                 error+="-"+ex.Message;
                 
             }
                if(!String.IsNullOrEmpty(error))
                    throw new Exception(error);
            }
    }
}
